package plus.lgx.textsearcher.searcher.extender;

import lombok.SneakyThrows;
import plus.lgx.textsearcher.config.SearcherConfig;

import java.lang.reflect.Constructor;

/**
 * Enum: ExtenderEnum<br>
 *
 * 匹配的字符串向前后扩展的方式。<br>
 * DEFAULT： 默认模式，匹配的字符串所在的一个句子。<br>
 * GREEDY：贪婪模式，匹配的字符串向前后扩展到最大字符量包含的所有完整句子。<br>
 * LINEAR：行匹配模式，匹配的字符串所在的一行。<br>
 * MAX：最大模式，匹配的字符串向前后扩展到最大字符量所得的串。<br>
 *
 * Create time: 12/17/22 7:46 PM
 *
 * @author lgx
 * @version 1.0
 */
public enum ExtenderEnum {

    LINE_(null),
    MULTILINE_(null),
    MAX(MaxExtender.class),
    GREEDY(GreedyExtender.class),
    DEFAULT(DefaultExtender.class),

    @Deprecated
    LINE(LineExtender.class),
    @Deprecated
    MULTILINE(MultilineExtender.class);

    private final Class<? extends Extender> cls;

    ExtenderEnum(Class<? extends Extender> cls) {
        this.cls = cls;
    }

    @SneakyThrows
    public Extender instance(SearcherConfig config) {
        Constructor<? extends Extender> ctor = cls.getConstructor(SearcherConfig.class);
        return ctor.newInstance(config);
    }

}
